﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Iacym.Entities;
using Iacym.BusinessLogic;
using Microsoft.Practices.Unity;

namespace Iacym.UI
{
    public partial class FrmMttoMatrimonio : Form
    {
        [Dependency]
        public IMatrimonioBL matrimonioBL { get; set; }

        [Dependency]
        public IPersonaBL personaBL { get; set; }

        [Dependency]
        public IHijoBL hijoBL { get; set; }

        bool isnew;

        public MATRIMONIO CurrentMatrimonio
        {
            get { return mATRIMONIOBindingSource.Current as MATRIMONIO; }
            set { mATRIMONIOBindingSource.DataSource = value; }
        }

        public FrmMttoMatrimonio()
        {
            InitializeComponent();
            this.BuildUp();
        }

        public USUARIO currentUsuarioMttoMatrimonio { get; set; }

        public void Nuevo()
        {
            isnew = true;
            mATRIMONIOBindingSource.AddNew();
        }

        public void Editar(Int32 id)
        {
            isnew = false;
            CurrentMatrimonio = matrimonioBL.GetFromMatrimonioById(id);
            
            CurrentMatrimonio.FechaMatrimonio = CurrentMatrimonio.FechaMatrimonio.HasValue == false
                ? DateTime.Now.Date
                : CurrentMatrimonio.FechaMatrimonio.Value.Date;
            
            CurrentMatrimonio.FechaMatrimonioCivil = CurrentMatrimonio.FechaMatrimonioCivil.HasValue == false
                ? DateTime.Now.Date
                : CurrentMatrimonio.FechaMatrimonioCivil.Value.Date;

            edadEsposoTextbox.Text = DateTime.Now.Day.Equals(CurrentMatrimonio.PERSONA1.FechaNacimiento.Day) || DateTime.Now.Month > CurrentMatrimonio.PERSONA1.FechaNacimiento.Month ? (DateTime.Now.Year - CurrentMatrimonio.PERSONA1.FechaNacimiento.Year).ToString() : ((DateTime.Now.Year - CurrentMatrimonio.PERSONA1.FechaNacimiento.Year) - 1).ToString();

            edadEsposaTextbox.Text = DateTime.Now.Day.Equals(CurrentMatrimonio.PERSONA.FechaNacimiento.Day) || DateTime.Now.Month > CurrentMatrimonio.PERSONA.FechaNacimiento.Month  ? (DateTime.Now.Year - CurrentMatrimonio.PERSONA.FechaNacimiento.Year).ToString() : ((DateTime.Now.Year - CurrentMatrimonio.PERSONA.FechaNacimiento.Year) - 1).ToString();
            
            mATRIMONIOBindingSource.DataSource = CurrentMatrimonio;
        }

        private void FrmMttoMatrimonio_Load(object sender, EventArgs e)
        {

        }

        private void BtnExtPersona1_Click(object sender, EventArgs e)
        {
            FrmPersona frm = new FrmPersona();
            frm.Extend();
            frm.currentUsuarioPersona = currentUsuarioMttoMatrimonio;
            frm.ShowDialog();
            if (frm.CurrentPersona != null)
            {
                if (frm.CurrentPersona.SexoId == 1)
                {
                    CurrentMatrimonio.PERSONA = frm.CurrentPersona;
                    CurrentMatrimonio.EsposaId = frm.CurrentPersona.Id;

                    edadEsposaTextbox.Text = DateTime.Now.Day.Equals(CurrentMatrimonio.PERSONA.FechaNacimiento.Day) || DateTime.Now.Month > CurrentMatrimonio.PERSONA.FechaNacimiento.Month ? (DateTime.Now.Year - CurrentMatrimonio.PERSONA.FechaNacimiento.Year).ToString() : ((DateTime.Now.Year - CurrentMatrimonio.PERSONA.FechaNacimiento.Year) - 1).ToString();

                    mATRIMONIOBindingSource.ResetBindings(true);
                }
            }
            else
            {
                MessageBox.Show(this, string.Format("Seleccione persona de Sexo Femenino"),
                                                                     @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }


        }

        private void BtnExtPersona2_Click(object sender, EventArgs e)
        {
            FrmPersona frm = new FrmPersona();
            frm.Extend();
            frm.currentUsuarioPersona = currentUsuarioMttoMatrimonio;
            frm.ShowDialog();

            if (frm.CurrentPersona != null)
            {
                if (frm.CurrentPersona.SexoId == 2)
                {
                    CurrentMatrimonio.PERSONA1 = frm.CurrentPersona;
                    CurrentMatrimonio.EsposoId = frm.CurrentPersona.Id;
                    //CurrentMatrimonio.PERSONA1 = personaBL.GetFromPersonaById(frm.CurrentPersona.Id);
                    //CurrentMatrimonio.EsposoId = personaBL.GetFromPersonaById(frm.CurrentPersona.Id).Id;
                    
                    edadEsposoTextbox.Text = DateTime.Now.Day.Equals(CurrentMatrimonio.PERSONA1.FechaNacimiento.Day) || DateTime.Now.Month > CurrentMatrimonio.PERSONA1.FechaNacimiento.Month ? (DateTime.Now.Year - CurrentMatrimonio.PERSONA1.FechaNacimiento.Year).ToString() : ((DateTime.Now.Year - CurrentMatrimonio.PERSONA1.FechaNacimiento.Year) - 1).ToString();
                    
                    mATRIMONIOBindingSource.ResetBindings(true);
                }
                else
                {
                    MessageBox.Show(this, string.Format("Seleccione persona de Sexo Masculino"),
                                                          "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }

        }

        private void BtnAgregarTrabajo_Click(object sender, EventArgs e)
        {
            var _matrimonio = mATRIMONIOBindingSource.Current as MATRIMONIO;

            if (_matrimonio.EsposaId != 0 & _matrimonio.EsposoId != 0)
            {
                PERSONA currenthijo = hIJOSBindingSource.Current as PERSONA;
                FrmPersona frm = new FrmPersona();
                frm.Extend();
                frm.currentUsuarioPersona = currentUsuarioMttoMatrimonio;
                frm.ShowDialog();

                currenthijo = frm.CurrentPersona;
                if (currenthijo != null)
                {
                    if (_matrimonio.EsposaId != frm.CurrentPersona.Id & _matrimonio.EsposoId != frm.CurrentPersona.Id)
                    {
                        var _hijo = new HIJO
                        {
                            HijoId = currenthijo.Id,
                            PERSONA = currenthijo
                        };

                        var existe = _matrimonio.HIJOS.Where(p => p.PERSONA.Id.Equals(_hijo.HijoId)).SingleOrDefault();
                        if (existe == null)
                        {
                            hIJOSBindingSource.Add(_hijo);
                            hIJOSBindingSource.ResetBindings(true);
                        }
                        else
                        {
                            var rpt = MessageBox.Show(this, string.Format("El hijo: {0}, " + "ya se agregó", currenthijo.NombreCompleto),
                                               "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        }
                    }
                    else
                    {
                        var rpt = MessageBox.Show(this, string.Format("El Hijo NO puede ser un Espos@: {0}", currenthijo.NombreCompleto),
                                                                  "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    }
                }
            }
            else
            {
                var rpt = MessageBox.Show(this, string.Format("Seleccione Esposos para el Matrimonio"),
                                                                                 "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }

        }

        //private void BtnQuitarExperienciaLaboral_Click(object sender, EventArgs e)
        //{
        //    var _hijo = hIJOSBindingSource.Current as HIJO;

        //    if (_hijo != null)
        //    {
        //        var rpt = MessageBox.Show(this, string.Format("¿Desea quitar el hijo: {0}?", _hijo.PERSONA.NombreCompleto),
        //                "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        //        if (rpt == DialogResult.Yes)
        //        {
        //            hIJOSBindingSource.RemoveCurrent();

        //        }
        //    }
        //}

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            var msg = "ERROR";

            MATRIMONIO currentmatrimonio = mATRIMONIOBindingSource.Current as MATRIMONIO;

            if (currentmatrimonio != null)
            {
                if (isnew)
                {
                    try
                    {
                        if (chbMatriReligioso.Checked) currentmatrimonio.FechaMatrimonio = fechaMatrimonioDateTimePicker.Value.Date;
                        else currentmatrimonio.FechaMatrimonio = null;

                        if (chbMatriCivil.Checked) currentmatrimonio.FechaMatrimonioCivil = fechaMatrimonioCivilDateTimePicker.Value.Date;
                        else currentmatrimonio.FechaMatrimonioCivil = null;
                        matrimonioBL.AdddMatrimonio(currentmatrimonio);
                        MessageBox.Show("Registro Correcto.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Close();
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    }
                }
                else
                {
                    try
                    {
                        //currentmatrimonio.FechaMatrimonio = fechaMatrimonioDateTimePicker.Value.Date;
                        if (chbMatriReligioso.Checked) currentmatrimonio.FechaMatrimonio = fechaMatrimonioDateTimePicker.Value.Date;
                        else currentmatrimonio.FechaMatrimonio = null;

                        if (chbMatriCivil.Checked) currentmatrimonio.FechaMatrimonioCivil = fechaMatrimonioCivilDateTimePicker.Value.Date;
                        else currentmatrimonio.FechaMatrimonioCivil = null;
                        matrimonioBL.UpdateMatrimonio(currentmatrimonio);
                        MessageBox.Show("Modifación Correcta.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Close();
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    }
                }
            }
        }

        private void hIJOSDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _matrimonio = mATRIMONIOBindingSource.Current as MATRIMONIO;
            var _hijo = hIJOSBindingSource.Current as HIJO;

            if (_hijo != null)
            {
                if (this.hIJOSDataGridView.Columns[e.ColumnIndex].Name.Equals("btnQuitar"))
                {
                    var rpt = MessageBox.Show(this, string.Format("¿Desea quitar la profesión: {0}?", _hijo.PERSONA.NombreCompleto),
                        "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        if (_hijo.Numero > 0)
                        {
                            hijoBL.RemoveHijo(_hijo.Numero, _hijo.MatrimonioId);
                        }
                        hIJOSBindingSource.RemoveCurrent();
                        hIJOSBindingSource.ResetBindings(true);
                    }
                }
            }
        }

        private void chbMatriReligioso_CheckedChanged(object sender, EventArgs e)
        {
            if (chbMatriReligioso.Checked) fechaMatrimonioDateTimePicker.Enabled = true;
            else fechaMatrimonioDateTimePicker.Enabled = false;
        }

        private void chbMatriCivil_CheckedChanged(object sender, EventArgs e)
        {
            if (chbMatriCivil.Checked) fechaMatrimonioCivilDateTimePicker.Enabled = true;
            else fechaMatrimonioCivilDateTimePicker.Enabled = false;
        }

        private void BtnQuitarExperienciaLaboral_Click(object sender, EventArgs e)
        {

        }
    }
}

